#include "mydata.h"
#include <QDir>
#include <QFileInfo>
#include <QFileDialog>
#include <QThread>

MyData::MyData(QObject *parent)
    : QObject{parent},QRunnable()
{
    setAutoDelete(false);
    //openSQL();

}
//打开数据库
void MyData::openSQL()
{
    db = QSqlDatabase::addDatabase("QMYSQL", QString::number((quint64)QThread::currentThreadId())); //连接的MYSQL的数据库驱动
    db.setHostName("192.168.1.102");  //主机名
    db.setPort(3306);             //端口
    db.setDatabaseName("motor_car");       //数据库名
    db.setUserName("root");           //用户名
    db.setPassword("123456");           //密码
    if(!db.open())
    {
        qDebug() << "open database failed:" << db.lastError().text();
    }
}

/*********************************存入数据库******************************/
//发送数据存入数据库
void MyData::saveDataSend(QString data)
{
   // qDebug() << "data thread = " << QThread::currentThread();
  //数据库
//QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
//  //设置数据库信息   外网数据库
//  //db.setHostName("rm-m5el9lv8rhp470l199o.mysql.rds.aliyuncs.com");    // 外网地址
//  //db.setPort(3306);                   // 如果使用的是默认端口可以不设置
//  //db.setDatabaseName("mydb3");        // 数据库名字  //data   student  data1
//  //db.setUserName("root3");            // 数据库用户名
//  //db.setPassword("12345678Liu");      // 数据库密码
//      //本地数据库
//      db.setHostName("127.0.0.1");
//      db.setDatabaseName("qsys");
//      db.setUserName("root");
//      db.setPassword("hgcn5180");
//      db.setPort(3306);
//      //检查本地驱动
//      //QStringList drivers = QSqlDatabase::drivers();
//      //   foreach(QString driver, drivers)
//      //       qDebug() << driver;
//  //连接数据库

//  if(!db.open())
//  {
//  qDebug()<<"Error:Faild to connect database."<<db.lastError();//数据库连接不正确会有提示报错

//  }
//  else
//  {
//   qDebug()<<"Succeed to connect database.";
//  }
////插入数据库
////qDebug()<<data;
// QSqlQuery query(db);
// QDateTime dateTime= QDateTime::currentDateTime();
// QString time = dateTime.toString("yyyy-MM-dd hh:mm:ss.zzz");
// query.prepare("insert into send values(?,?,?)");//没加values会出现函数序列报错    send  data    data1
// query.bindValue(0,NULL);//16进制
// query.bindValue(1,time);
// query.bindValue(2,data);
// query.exec();
}





void MyData::run()
{
    openSQL();       
}


//新电机一
void MyData::writeModuleFile_01(QString data)
{
    QFileInfo info(FileabsolutePath);//获取  .exe文件所在路径
    QString absolutePath = info.absolutePath();//不包含文件的绝对路径
    //设置一天存一个文件名
    QString filename;
    QDateTime timefile = QDateTime::currentDateTime();//获取系统现在的时间
    QString current_date =timefile.toString("yyyy.MM.dd hh:mm:ss.zzz");
    QString datefile = timefile.toString("yyyy.MM.dd");//设置显示的格式
    //文件名
    filename += datefile;
    filename += ".txt";
    //文件夹名称
    QString dirName = absolutePath+"/module1_Fault";
    //创建文件夹
    QDir dir(dirName);//文件夹只会被创建一次
       if(!dir.exists())
       {
           dir.mkdir(dirName);
           qDebug()<<"文件夹创建成功";
       }
    //对文件夹进行写操作
    QFile file(dirName+"/"+filename);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text |QIODevice::Append))
    {
       // QMessageBox::warning(this,tr("double file edit"),tr("no write").arg("D:/save.txt").arg(file.errorString())); //因为自动存储，提示框可以不显示
        return;
    }
     //写入文件
    QString hh = "\n";  //换行
    QString t1 = current_date+"    "+data+hh;
       file.write(t1.toUtf8());
     //关闭文件
       file.flush();
       file.close();
}
//新电机二
void MyData::writeModuleFile_02(QString data)
{
    QFileInfo info(FileabsolutePath);//获取  .exe文件所在路径
    QString absolutePath = info.absolutePath();//不包含文件的绝对路径
    //设置一天存一个文件名
    QString filename;
    QDateTime timefile = QDateTime::currentDateTime();//获取系统现在的时间
    QString current_date =timefile.toString("yyyy.MM.dd hh:mm:ss.zzz");
    QString datefile = timefile.toString("yyyy.MM.dd");//设置显示的格式
    //文件名
    filename += datefile;
    filename += ".txt";
    //文件夹名称
    QString dirName = absolutePath+"/module2_Fault";
    //创建文件夹
    QDir dir(dirName);//文件夹只会被创建一次
       if(!dir.exists())
       {
           dir.mkdir(dirName);
           qDebug()<<"文件夹创建成功";
       }
    //对文件夹进行写操作
    QFile file(dirName+"/"+filename);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text |QIODevice::Append))
    {
       // QMessageBox::warning(this,tr("double file edit"),tr("no write").arg("D:/save.txt").arg(file.errorString())); //因为自动存储，提示框可以不显示
        return;
    }
     //写入文件
    QString hh = "\n";  //换行
    QString t1 = current_date+"    "+data+hh;
       file.write(t1.toUtf8());
     //关闭文件
       file.flush();
       file.close();
}
//新电机三
void MyData::writeModuleFile_03(QString data)
{
    QFileInfo info(FileabsolutePath);//获取  .exe文件所在路径
    QString absolutePath = info.absolutePath();//不包含文件的绝对路径
    //设置一天存一个文件名
    QString filename;
    QDateTime timefile = QDateTime::currentDateTime();//获取系统现在的时间
    QString current_date =timefile.toString("yyyy.MM.dd hh:mm:ss.zzz");
    QString datefile = timefile.toString("yyyy.MM.dd");//设置显示的格式
    //文件名
    filename += datefile;
    filename += ".txt";
    //文件夹名称
    QString dirName = absolutePath+"/module3_Fault";
    //创建文件夹
    QDir dir(dirName);//文件夹只会被创建一次
       if(!dir.exists())
       {
           dir.mkdir(dirName);
           qDebug()<<"文件夹创建成功";
       }
    //对文件夹进行写操作
    QFile file(dirName+"/"+filename);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text |QIODevice::Append))
    {
       // QMessageBox::warning(this,tr("double file edit"),tr("no write").arg("D:/save.txt").arg(file.errorString())); //因为自动存储，提示框可以不显示
        return;
    }
     //写入文件
    QString hh = "\n";  //换行
    QString t1 = current_date+"    "+data+hh;
       file.write(t1.toUtf8());
     //关闭文件
       file.flush();
       file.close();
}
//新电机四
void MyData::writeModuleFile_04(QString data)
{
    QFileInfo info(FileabsolutePath);//获取  .exe文件所在路径
    QString absolutePath = info.absolutePath();//不包含文件的绝对路径
    //设置一天存一个文件名
    QString filename;
    QDateTime timefile = QDateTime::currentDateTime();//获取系统现在的时间
    QString current_date =timefile.toString("yyyy.MM.dd hh:mm:ss.zzz");
    QString datefile = timefile.toString("yyyy.MM.dd");//设置显示的格式
    //文件名
    filename += datefile;
    filename += ".txt";
    //文件夹名称
    QString dirName = absolutePath+"/module4_Fault";
    //创建文件夹
    QDir dir(dirName);//文件夹只会被创建一次
       if(!dir.exists())
       {
           dir.mkdir(dirName);
           qDebug()<<"文件夹创建成功";
       }
    //对文件夹进行写操作
    QFile file(dirName+"/"+filename);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text |QIODevice::Append))
    {
       // QMessageBox::warning(this,tr("double file edit"),tr("no write").arg("D:/save.txt").arg(file.errorString())); //因为自动存储，提示框可以不显示
        return;
    }
     //写入文件
    QString hh = "\n";  //换行
    QString t1 = current_date+"    "+data+hh;
       file.write(t1.toUtf8());
     //关闭文件
       file.flush();
       file.close();
}
//新电机五
void MyData::writeModule_set_File_05(QString data)
{
    QFileInfo info("./Track_v1803.exe");//获取  .exe文件所在路径
    QString absolutePath = info.absolutePath();//不包含文件的绝对路径
    //设置一天存一个文件名
    QString filename;
    QDateTime timefile = QDateTime::currentDateTime();//获取系统现在的时间
    QString current_date =timefile.toString("yyyy.MM.dd hh:mm:ss.zzz");
    QString datefile = timefile.toString("yyyy.MM.dd");//设置显示的格式
    //文件名
    filename += datefile;
    filename += ".txt";
    //文件夹名称
    QString dirName = absolutePath+"/ModuleSet_Data";
    //创建文件夹
    QDir dir(dirName);//文件夹只会被创建一次
       if(!dir.exists())
       {
           dir.mkdir(dirName);
           qDebug()<<"文件夹创建成功";
       }
    //对文件夹进行写操作
    QFile file(dirName+"/"+filename);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text |QIODevice::Append))
    {
       // QMessageBox::warning(this,tr("double file edit"),tr("no write").arg("D:/save.txt").arg(file.errorString())); //因为自动存储，提示框可以不显示
        return;
    }
     //写入文件
    QString hh = "\n";  //换行
    QString t1 = current_date+"    "+data+hh;
       file.write(t1.toUtf8());
     //关闭文件
       file.flush();
       file.close();
}

void MyData::writeModule_set_File_06(QString data)
{
    QFileInfo info("./Track_v1803.exe");//获取  .exe文件所在路径
    QString absolutePath = info.absolutePath();//不包含文件的绝对路径
    //设置一天存一个文件名
    QString filename;
    QDateTime timefile = QDateTime::currentDateTime();//获取系统现在的时间
    QString current_date =timefile.toString("yyyy.MM.dd hh:mm:ss.zzz");
    QString datefile = timefile.toString("yyyy.MM.dd");//设置显示的格式
    //文件名
    filename += datefile;
    filename += ".txt";
    //文件夹名称
    QString dirName = absolutePath+"/ModuleSet2_Data";
    //创建文件夹
    QDir dir(dirName);//文件夹只会被创建一次
       if(!dir.exists())
       {
           dir.mkdir(dirName);
           qDebug()<<"文件夹创建成功";
       }
    //对文件夹进行写操作
    QFile file(dirName+"/"+filename);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text |QIODevice::Append))
    {
       // QMessageBox::warning(this,tr("double file edit"),tr("no write").arg("D:/save.txt").arg(file.errorString())); //因为自动存储，提示框可以不显示
        return;
    }
     //写入文件
    QString hh = "\n";  //换行
    QString t1 = current_date+"    "+data+hh;
       file.write(t1.toUtf8());
     //关闭文件
       file.flush();
       file.close();
}


//本地存储
//存入本地文件
//发送数据  存储  存储格式：时间戳+"   "+数据+"   "+换行
/************************************电池数据*********************************/
//电机发送TCP数据
void MyData::writeTCPFile(QString data)
{
    //qDebug()<<data;
    QFileInfo info("./Track_v1803.exe");//获取  .exe文件所在路径
    QString absolutePath = info.absolutePath();//不包含文件的绝对路径
    //设置一天存一个文件名
    QString filename;
    QDateTime timefile = QDateTime::currentDateTime();//获取系统现在的时间
    QString current_date =timefile.toString("yyyy.MM.dd hh:mm:ss.zzz");
    QString datefile = timefile.toString("yyyy.MM.dd");//设置显示的格式
    //文件名
    filename += datefile;
    filename += ".txt";
    //文件夹名称
    QString dirName = absolutePath+"/TCPData";
    //创建文件夹
    QDir dir(dirName);//文件夹只会被创建一次
       if(!dir.exists())
       {
           dir.mkdir(dirName);
           qDebug()<<"文件夹创建成功";
       }
    //对文件夹进行写操作
    QFile file(dirName+"/"+filename);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text |QIODevice::Append))
    {
       // QMessageBox::warning(this,tr("double file edit"),tr("no write").arg("D:/save.txt").arg(file.errorString())); //因为自动存储，提示框可以不显示
        return;
    }
     //写入文件
    QString hh = "\n";  //换行
    QString t1 = current_date+"    "+data+hh;
       file.write(t1.toUtf8());
     //关闭文件
       file.flush();
       file.close();
}

void MyData::SOCwriteFile(QString data)
{
    QFileInfo info("./Track_v1803.exe");//获取  .exe文件所在路径
    QString absolutePath = info.absolutePath();//不包含文件的绝对路径
    //设置一天存一个文件名
    QString filename;
    QDateTime timefile = QDateTime::currentDateTime();//获取系统现在的时间
    QString current_date =timefile.toString("yyyy.MM.dd hh:mm:ss.zzz");
    QString datefile = timefile.toString("yyyy.MM.dd");//设置显示的格式
    //文件名
    filename += datefile;
    filename += ".txt";
    //文件夹名称
    QString dirName = absolutePath+"/BatterySOC";   //MR6000 PW8001  Nm3000
    //创建文件夹
    QDir dir(dirName);//文件夹只会被创建一次
       if(!dir.exists())
       {
           dir.mkdir(dirName);
           qDebug()<<"文件夹创建成功";
       }

    //对文件夹进行写操作
    QFile file(dirName+"/"+filename);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text |QIODevice::Append))
    {
       // QMessageBox::warning(this,tr("double file edit"),tr("no write").arg("D:/save.txt").arg(file.errorString())); //因为自动存储，提示框可以不显示
        return;
    }
    //写入文件
   QString hh = "\n";  //换行
   QString t1 = current_date+"  "+data+hh;
    file.write(t1.toUtf8());

     //关闭文件
       file.flush();
       file.close();
}

void MyData::UWBwriteFile(QString data)
{
    QFileInfo info("./Track_v1803.exe");//获取  .exe文件所在路径
    QString absolutePath = info.absolutePath();//不包含文件的绝对路径
    //设置一天存一个文件名
    QString filename;
    QDateTime timefile = QDateTime::currentDateTime();//获取系统现在的时间
    QString current_date =timefile.toString("yyyy.MM.dd hh:mm:ss.zzz");
    QString datefile = timefile.toString("yyyy.MM.dd");//设置显示的格式
    //文件名
    filename += datefile;
    filename += ".txt";
    //文件夹名称
    QString dirName = absolutePath+"/UWB04";   //MR6000 PW8001  Nm3000
    //创建文件夹
    QDir dir(dirName);//文件夹只会被创建一次
       if(!dir.exists())
       {
           dir.mkdir(dirName);
           qDebug()<<"文件夹创建成功";
       }

    //对文件夹进行写操作
    QFile file(dirName+"/"+filename);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text |QIODevice::Append))
    {
       // QMessageBox::warning(this,tr("double file edit"),tr("no write").arg("D:/save.txt").arg(file.errorString())); //因为自动存储，提示框可以不显示
        return;
    }
    //写入文件
   QString hh = "\n";  //换行
   QString t1 = current_date+"  "+data+hh;
    file.write(t1.toUtf8());

     //关闭文件
       file.flush();
       file.close();
}
/**********************************电机CAN接收数据************************************/
//13台电机总数据
void MyData::writeCANFile(QString data)
{
    QFileInfo info("./Track_v1803.exe");//获取  .exe文件所在路径
    QString absolutePath = info.absolutePath();//不包含文件的绝对路径
    //设置一天存一个文件名
    QString filename;
    QDateTime timefile = QDateTime::currentDateTime();//获取系统现在的时间
    QString current_date =timefile.toString("yyyy.MM.dd hh:mm:ss.zzz");
    QString datefile = timefile.toString("yyyy.MM.dd");//设置显示的格式
    //文件名
    filename += datefile;
    filename += ".txt";
    //文件夹名称
    QString dirName = absolutePath+"/CANData";
    //创建文件夹
    QDir dir(dirName);//文件夹只会被创建一次
       if(!dir.exists())
       {
           dir.mkdir(dirName);
           qDebug()<<"文件夹创建成功";
       }
    //对文件夹进行写操作
    QFile file(dirName+"/"+filename);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text |QIODevice::Append))
    {
       // QMessageBox::warning(this,tr("double file edit"),tr("no write").arg("D:/save.txt").arg(file.errorString())); //因为自动存储，提示框可以不显示
        return;
    }
     //写入文件
    QString hh = "\n";  //换行
    QString t1 = current_date+"    "+data+hh;
       file.write(t1.toUtf8());
     //关闭文件
       file.flush();
       file.close();
}

